﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Policy;
using System.Web;
using System.Web.UI;
using System.Web.ModelBinding;
using System.Web.UI.WebControls;
using Microsoft.Practices.Unity;
using Triunfadores.BusinessEntities;
using Triunfadores.BusinessLogic.Service;

namespace Triunfadores.Web.Clientes
{
    public partial class RegCliente : System.Web.UI.Page
    {
        #region Declaracion de dependencias
        [Dependency]
        public IBeneficiarioService BeneficiarioService { get; set; }

        [Dependency]
        public ITipoClienteService TipoClienteService { get; set; }

        [Dependency]
        public IUbigeoService UbigeoService { get; set; }

        [Dependency]
        public IClienteService ClienteService { get; set; }

        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            var opc = Request.QueryString["opc"];
            var idCliente = Request.QueryString["idCliente"];

            if (!Page.IsPostBack)
            {
                cvFechNac.ValueToCompare = DateTime.Now.ToShortDateString();

                if (opc != null && opc.Equals("nuevo"))
                {
                    ViewState["opc"] = "nuevo";

                    var cliente = new Cliente()
                    {
                        //siquiero que la fecha sea la misma del sistema
                        FechIngreso = DateTime.Now,

                    };

                    BindingCliente(cliente);

                    Cache.Insert("cliente", cliente);

                }
            }
        }

        #region ENLACE A CLIENTE
        private void BindingCliente(Cliente cliente)
        {
            hfIdCliente.Value = cliente.Id.ToString();

            tbxFechIngSocio.Text = cliente.FechIngreso.ToShortDateString();
            cbxEstado.Checked = true;
            tbxNroHijoSocio.Text = "0";

            lvDetalle.DataSource = cliente.IcDetallesCliente;
            lvDetalle.DataBind();
        }
        #endregion

        public IEnumerable<Ubigeo> GetUbigeos()
        {
            var ubigeos = UbigeoService.GetAllUbigeos().ToList();

            ubigeos.Insert(0, new Ubigeo() {Id = 0, NombreCompleto = "[- Selecciona -]"});

            return ubigeos.AsEnumerable();

        }

        public IEnumerable<TipoCliente> GetTiposClientes()
        {
            var tiposCliente = TipoClienteService.GetAllTiposCliente().ToList();

            tiposCliente.Insert(0, new TipoCliente() { Id = 0, Tipo = "[- Selecciona -]" });

            return tiposCliente.AsEnumerable();
        }

        public IQueryable<Beneficiario> GetBeneficiarios([Control("tbxDniBeneficiario")]string dniBeneficiario)
        {
            return BeneficiarioService.GetBeneficiarioByDni(dniBeneficiario).AsQueryable();
        }

        protected void lvBeneficiarios_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "AddDetalle")
            {
                var beneficiarioId = Int32.Parse(e.CommandArgument.ToString());
                var beneficiario = BeneficiarioService.GetBeneficiarioById(beneficiarioId);

                //recuperar pedido del cache
                var cliente = Cache.Get("cliente") as Cliente;

                var existe = cliente.IcDetallesCliente.SingleOrDefault(i => i.BeneficiarioId.Equals(beneficiarioId));

                if (existe == null)
                {
                    var newDetalle = new DetalleCliente()
                    {
                        Beneficiario = beneficiario,
                        BeneficiarioId = beneficiarioId,
                        ClienteId = cliente.Id,
                        Cantidad = 1

                    };
                    cliente.IcDetallesCliente.Add(newDetalle);

                }
                else
                {
                    string script = "alert('Este Beneficiario ya ha sido asignado');";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, true);

                }

                BindingCliente(cliente);

                Cache.Insert("cliente", cliente);

            }
        }

        protected void lvDetalle_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "QuitarDetalle")
            {
                var beneficiarioId = Int32.Parse(e.CommandArgument.ToString());

                //recuperar pedido del cache
                var cliente = Cache.Get("cliente") as Cliente;

                //item es un insumo agrgado al detalle
                var beneficiario = cliente.IcDetallesCliente.SingleOrDefault(i => i.BeneficiarioId.Equals(beneficiarioId));

                if (beneficiario != null)
                {
                    //verificamos que si la cantidad del item en el detalle es == 1
                    //si es verdadero borrara el item del detalle
                    if (beneficiario.Cantidad == 1)
                    {
                        cliente.IcDetallesCliente.Remove(beneficiario);
                    }
                    //si la condicion del if es falsa, entonces solo disminuira la cantidad del item
                    beneficiario.Cantidad -= 1;
                }

                BindingCliente(cliente);

                Cache.Insert("cliente", cliente);
            }
        }

        protected void Unnamed1_Click(object sender, EventArgs e)
        {
            var cliente = Cache.Get("cliente") as Cliente;

            cliente.Nombres = tbxNombSocio.Text;
            cliente.Apellidos = tbxApellSocio.Text;
            cliente.Dni = tbxDniSocio.Text;
            cliente.FechNacimiento = DateTime.Parse(tbxFechNacSocio.Text);
            cliente.IdLugarNacimiento = Int32.Parse(ddlLugarNacimiento.SelectedValue);
            cliente.Sexo = ddlSexo.SelectedValue;
            cliente.EstadoCivil = ddlEstadoCivil.SelectedValue.ToString();
            cliente.NroHijos = tbxNroHijoSocio.Text;
            cliente.TipoVivienda = ddlTipoVivienda.SelectedValue.ToString();
            //ID del arrendador
            cliente.Direccion = tbxDireccSocio.Text;
            cliente.Barrio = tbxBarrioSocio.Text;
            cliente.IdLugarCasa = Int32.Parse(ddlLugarDomicilio.SelectedValue);
            cliente.TelefonoFijo = tbxTelFijoSocio.Text;
            cliente.Telefono = tbxTelfSocio.Text;
            cliente.Telefono1 = tbxTelSocio2.Text;
            cliente.Ocupacion = tbxOcupacionSocio.Text;
            cliente.Email = tbxEmailSocio.Text;
            cliente.Empleado=Boolean.Parse(rbtEmpleado.SelectedValue);
            cliente.Ocupacion = tbxOcupacionSocio.Text;
            cliente.CentroTrabajo = tbxCenTraSocio.Text;
            if (ddlLugarTrabajo.SelectedValue!= "0")
            {
                cliente.IdDirecCentTrabajo = Int32.Parse(ddlLugarTrabajo.SelectedValue);
            }
            else
            {
                cliente.IdDirecCentTrabajo = null;
            }
            
            cliente.TelOficina = tbxTelOficinaTrab.Text;
            cliente.TelCelular = tbxTel1Trab.Text;
            cliente.TelCelular2 = tbxTel2Trab.Text;
            cliente.FechIngreso = DateTime.Parse(tbxFechIngSocio.Text);
            //estado
            cliente.FechIngreso = DateTime.Parse(tbxFechIngSocio.Text);
            if (cbxEstado.Checked)
            {
                cliente.Estado=Boolean.Parse("True");
            }
            else
            {
                cliente.Estado = Boolean.Parse("False");
            }
            cliente.IdTipoCliente = Int32.Parse(ddlTipoCliente.SelectedValue);

            if (ViewState["opc"].ToString() == "nuevo")
            {
                ClienteService.AddCliente(cliente);

                string script = "alert('Se registro el cliente');";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, true);

            }
            Response.Redirect("GestionarClientes.aspx");
        }


    }
}